import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;

class Student {
    public int studentId;
    public int classId;
}

@WebServlet("/postParameter2")
public class PostParameter2Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过这个方法来处理 body 为 json 格式的数据
        // 直接把 req 对象里的 body 完整的读取出来
        // getInputStream
        // 在流对象中读多少个字节，取决于 Content-Length
        // 定义好数组
       /* int length = req.getContentLength();
        byte[] buffer = new byte[length];
        // 构造字节数组
        InputStream inputStream = req.getInputStream();
        inputStream.read(buffer);

        // 把这个字节数组构造成 Stream，打印出来
        String body = new String(buffer, 0, length, "utf8");
        System.out.println("body = " + body);
        resp.getWriter().write(body); */

        // 使用 jackson 涉及到的核心对象
        ObjectMapper objectMapper = new ObjectMapper();
        // readValue 就是把一个 json 格式的字符串转成 Java 对象
        /*
            1、objectMapper.readValue() 会从 body 中读取出 json 格式的字符串
            2、根据第二个参数 Student.class 创建出 Student 实例
            3、解析上述 json 格式的字符串，处理成 map 键值对结构
            4、遍历所有的键值对，看键的名字和Student实例的哪个属性名字匹配，就把对应的value设置到该属性中去
            5、返回Student实例
         */
        Student student = objectMapper.readValue(req.getInputStream(), Student.class);
        System.out.println(student.studentId + ", " + student.classId);
    }
}

